{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-b0ffac263758>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From D:\\Anacanda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From D:\\Anacanda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From D:\\Anacanda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From D:\\Anacanda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From D:\\Anacanda\\lib\\site-packages\\tensorflow\\python\\framework\\op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n"
     ]
    }
   ],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 200\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 6000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.252818, the validation accuracy is 0.8894\n",
      "after 200 training steps, the loss is 0.112535, the validation accuracy is 0.9214\n",
      "after 300 training steps, the loss is 0.193153, the validation accuracy is 0.9274\n",
      "after 400 training steps, the loss is 0.437732, the validation accuracy is 0.9412\n",
      "after 500 training steps, the loss is 0.213107, the validation accuracy is 0.9468\n",
      "after 600 training steps, the loss is 0.247804, the validation accuracy is 0.9474\n",
      "WARNING:tensorflow:From D:\\Anacanda\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:966: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n",
      "after 700 training steps, the loss is 0.130289, the validation accuracy is 0.9412\n",
      "after 800 training steps, the loss is 0.0631161, the validation accuracy is 0.955\n",
      "after 900 training steps, the loss is 0.199511, the validation accuracy is 0.955\n",
      "after 1000 training steps, the loss is 0.0338788, the validation accuracy is 0.9552\n",
      "after 1100 training steps, the loss is 0.360965, the validation accuracy is 0.9612\n",
      "after 1200 training steps, the loss is 0.301967, the validation accuracy is 0.9516\n",
      "after 1300 training steps, the loss is 0.257067, the validation accuracy is 0.9568\n",
      "after 1400 training steps, the loss is 0.0153988, the validation accuracy is 0.9604\n",
      "after 1500 training steps, the loss is 0.213733, the validation accuracy is 0.9654\n",
      "after 1600 training steps, the loss is 0.0340154, the validation accuracy is 0.9626\n",
      "after 1700 training steps, the loss is 0.119239, the validation accuracy is 0.965\n",
      "after 1800 training steps, the loss is 0.109399, the validation accuracy is 0.9674\n",
      "after 1900 training steps, the loss is 0.105823, the validation accuracy is 0.9668\n",
      "after 2000 training steps, the loss is 0.151543, the validation accuracy is 0.9664\n",
      "after 2100 training steps, the loss is 0.043541, the validation accuracy is 0.9694\n",
      "after 2200 training steps, the loss is 0.158109, the validation accuracy is 0.9696\n",
      "after 2300 training steps, the loss is 0.0117975, the validation accuracy is 0.9712\n",
      "after 2400 training steps, the loss is 0.0368316, the validation accuracy is 0.9712\n",
      "after 2500 training steps, the loss is 0.105557, the validation accuracy is 0.9642\n",
      "after 2600 training steps, the loss is 0.0360296, the validation accuracy is 0.9694\n",
      "after 2700 training steps, the loss is 0.059553, the validation accuracy is 0.9722\n",
      "after 2800 training steps, the loss is 0.0418671, the validation accuracy is 0.9732\n",
      "after 2900 training steps, the loss is 0.0153436, the validation accuracy is 0.9692\n",
      "after 3000 training steps, the loss is 0.0162426, the validation accuracy is 0.9734\n",
      "after 3100 training steps, the loss is 0.0807273, the validation accuracy is 0.9644\n",
      "after 3200 training steps, the loss is 0.110299, the validation accuracy is 0.9742\n",
      "after 3300 training steps, the loss is 0.0248195, the validation accuracy is 0.9722\n",
      "after 3400 training steps, the loss is 0.268542, the validation accuracy is 0.9714\n",
      "after 3500 training steps, the loss is 0.0620669, the validation accuracy is 0.9722\n",
      "after 3600 training steps, the loss is 0.061091, the validation accuracy is 0.9734\n",
      "after 3700 training steps, the loss is 0.0487437, the validation accuracy is 0.9766\n",
      "after 3800 training steps, the loss is 0.0138157, the validation accuracy is 0.9724\n",
      "after 3900 training steps, the loss is 0.0440317, the validation accuracy is 0.9764\n",
      "after 4000 training steps, the loss is 0.0278634, the validation accuracy is 0.9746\n",
      "after 4100 training steps, the loss is 0.0471046, the validation accuracy is 0.9734\n",
      "after 4200 training steps, the loss is 0.0406965, the validation accuracy is 0.9714\n",
      "after 4300 training steps, the loss is 0.0321814, the validation accuracy is 0.973\n",
      "after 4400 training steps, the loss is 0.0289232, the validation accuracy is 0.9716\n",
      "after 4500 training steps, the loss is 0.156295, the validation accuracy is 0.9762\n",
      "after 4600 training steps, the loss is 0.0100753, the validation accuracy is 0.9756\n",
      "after 4700 training steps, the loss is 0.0260503, the validation accuracy is 0.9754\n",
      "after 4800 training steps, the loss is 0.0825244, the validation accuracy is 0.9772\n",
      "after 4900 training steps, the loss is 0.0537617, the validation accuracy is 0.9676\n",
      "after 5000 training steps, the loss is 0.0174017, the validation accuracy is 0.9754\n",
      "after 5100 training steps, the loss is 0.0131945, the validation accuracy is 0.9768\n",
      "after 5200 training steps, the loss is 0.00413007, the validation accuracy is 0.9772\n",
      "after 5300 training steps, the loss is 0.00595149, the validation accuracy is 0.979\n",
      "after 5400 training steps, the loss is 0.0114861, the validation accuracy is 0.979\n",
      "after 5500 training steps, the loss is 0.00924867, the validation accuracy is 0.9788\n",
      "after 5600 training steps, the loss is 0.0878322, the validation accuracy is 0.9792\n",
      "after 5700 training steps, the loss is 0.104387, the validation accuracy is 0.9742\n",
      "after 5800 training steps, the loss is 0.0130774, the validation accuracy is 0.9784\n",
      "after 5900 training steps, the loss is 0.143619, the validation accuracy is 0.9764\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9759\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From D:\\Anacanda\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-5900\n",
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
